
#ifndef IEqualityComparer_h
#define IEqualityComparer_h

// C# includes.
#include <Typedef.h>
#include <Defines.h>
#include <CSharpPropertyMethods.h>

// Riccsson includes.
#include <System/Object.h>

namespace Riccsson
{
	namespace System
	{
		namespace Collections
		{
			interface IEqualityComparer
			{
				// Summary:
				//     Determines whether the specified objects are equal.
				//
				// Parameters:
				//   x:
				//     The first object to compare.
				//
				//   y:
				//     The second object to compare.
				//
				// Returns:
				//     true if the specified objects are equal; otherwise, false.
				//
				// Exceptions:
				//   System.ArgumentException:
				//     x and y are of different types and neither one can handle comparisons with
				//     the other.
				public: virtual bool Equals(object* x, object* y) = 0;

				//
				// Summary:
				//     Returns a hash code for the specified object.
				//
				// Parameters:
				//   obj:
				//     The System.Object for which a hash code is to be returned.
				//
				// Returns:
				//     A hash code for the specified object.
				//
				// Exceptions:
				//   System.ArgumentNullException:
				//     The type of obj is a reference type and obj is null.
				public: virtual int GetHashCode(object* obj) = 0;
			};
		}
	}
}

#endif